package jp.co.toshiba.ffsa.action.csde;

import java.util.ArrayList;

import javax.annotation.Resource;

import jp.co.toshiba.ffsa.action.common.CommonAction;
import jp.co.toshiba.ffsa.dto.LoginDto;
import jp.co.toshiba.ffsa.form.csde.Csde203Form;
import jp.co.toshiba.ffsa.service.common.ConstantValue;
import jp.co.toshiba.ffsa.service.csde.Csde203Service;

import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.util.ActionMessagesUtil;
import org.seasar.struts.util.MessageResourcesUtil;
import org.seasar.struts.util.RequestUtil;

/**
 * 設計I/F - 新規プロジェクト作成確認画面
 * @author npc
 */
public class Csde203Action extends CommonAction {

    /** 画面ID */
    public String screenID = "CSDE203";

    /** アクションフォーム */
    @ActionForm
    @Resource
    protected Csde203Form csde203Form;

    /** アクションサービス */
    @ActionForm
    @Resource
    protected Csde203Service csde203Service;

    /** プロジェクトID */
    public String projectId = "";


    /**
     * 初期処理
     * @return 画面遷移先
     * @throws Exception
     */
    @Execute(validator = false)
    public String index() throws Exception {
        // ログイン済判定する
        if(judgeLogin(csde203Form.getSessionId())){
            try {
                // リファラ判定
                if(judgeRefferer()){
                    return "/csde/csde203.jsp";
                }else{
                    return topTransition;
                }
            } catch (Exception e) {
                errorLogWriter(e, "index", screenID);
                throw e;
            }
        }else{
            return topTransition;
        }
    }

    /**
     * プロジェクト作成処理
     * @return 画面遷移先
     * @throws Exception
     */
    @Execute(validator = true,input="/csde/csde203/error")
    public String create() throws Exception {
        String transition = "/csde/csde203.jsp";
        String result = "";

        try {
            // ログイン済判定する
            if( !judgeLogin(csde203Form.getSessionId()) ){
                return topTransition;
            }

            // リファラ判定
            if( !judgeRefferer() ){
                return topTransition;
            }

            // Serviceクラスを呼び出す
            csde203Service = new Csde203Service();
            csde203Service.setUserId(((LoginDto)RequestUtil.getRequest().getSession().getAttribute("login_dto")).getUserID());
            csde203Service.projectName = csde203Form.projectName;
            csde203Service.description = csde203Form.description;

            // プロジェクト情報を登録する
            if( !csde203Service.insertProjectInfo() ){
                ActionMessages messages = new ActionMessages();
                messages.add("failedInsertProjectInfo", new ActionMessage(csde203Service.getErrorCode(), true));
                ActionMessagesUtil.addErrors(RequestUtil.getRequest().getSession(true), messages);
                return transition;
            }

            // ワークフロー情報の登録
            if( !csde203Service.insertWorkflowInfo() ){
                ActionMessages messages = new ActionMessages();
                messages.add("insertWorkflowInfoFailed", new ActionMessage(csde203Service.getErrorCode(), true));
                ActionMessagesUtil.addErrors(RequestUtil.getRequest().getSession(true), messages);
                return transition;
            }

            //  メール送信
            if( !csde203Service.mailSend() ){
                ActionMessages messages = new ActionMessages();
                messages.add("mailSendFailed", new ActionMessage(csde203Service.getErrorCode(), true));
                ActionMessagesUtil.addErrors(RequestUtil.getRequest().getSession(true), messages);
                return transition;
            }

            result = ConstantValue.success;

            // 操作ログ記述
            ArrayList<ArrayList<String>> parameters = new ArrayList<ArrayList<String>>();
            ArrayList<String> parameterNames = new ArrayList<String>();
            ArrayList<String> values = new ArrayList<String>();
            parameterNames.add(MessageResourcesUtil.getMessage("csde203.003"));
            values.add(csde203Form.projectName);
            parameterNames.add(MessageResourcesUtil.getMessage("csde203.004"));
            values.add(csde203Form.description);
            parameters.add(parameterNames);
            parameters.add(values);
            entryOperationHistory(screenID, "create", parameters, result);

            transition = "/csde/csde204.jsp";

        } catch (Exception e) {
            errorLogWriter(e, "create", screenID);
            throw e;
        }

        return transition;
    }
    /**
     * バリデーションエラー処理
     * @return 遷移先
     * @throws Exception
     */
    @Execute(validator = false)
    public String error() throws Exception {

        try {
            // ログイン済判定する
            if( !judgeLogin(csde203Form.getSessionId()) ){
                return topTransition;
            }

            // リファラ判定
            if( !judgeRefferer() ){
                return topTransition;
            }

            // セッションタイムアウト判定
            if( !judgeSession() ){
                return topTransition;
            }

            return index();

        }catch(Exception e) {
            errorLogWriter(e, "create", screenID);
            throw e;
        }

    }

}